/**
 * 格式化金额
 * @param amount 金额数值
 * @param options 格式化选项
 * @returns 格式化后的金额字符串
 */
export function formatAmount(
  amount: number | string,
  options: {
    currency?: string; // 货币符号，默认 $
    decimals?: number; // 小数位数，默认 2
    showPositive?: boolean; // 是否显示正号，默认 false
  } = {}
): string {
  const {
    currency = '$',
    decimals = 2,
    showPositive = false,
  } = options;

  // 转换为数字
  const num = typeof amount === 'string' ? parseFloat(amount) : amount;
  
  // 处理 NaN
  if (isNaN(num)) return `${currency}0.00`;

  // 获取符号
  const sign = num < 0 ? '-' : (showPositive ? '+' : '');
  
  // 格式化数字
  const absNum = Math.abs(num);
  const formatted = absNum.toLocaleString('en-US', {
    minimumFractionDigits: decimals,
    maximumFractionDigits: decimals,
  });

  return `${sign}${currency}${formatted}`;
}

/**
 * 格式化百分比
 * @param value 百分比值 (0-100)
 * @param decimals 小数位数
 * @returns 格式化后的百分比字符串
 */
export function formatPercentage(value: number, decimals = 2): string {
  if (isNaN(value)) return '0%';
  
  return value.toLocaleString('en-US', {
    minimumFractionDigits: decimals,
    maximumFractionDigits: decimals,
  }) + '%';
}

/**
 * 格式化验证码输入,只保留数字
 * @param code 验证码字符串
 * @param length 期望长度,默认6位
 * @returns 格式化后的验证码字符串
 */
export function formatVerificationCode(code: string, length = 6): string {
  // 只保留数字
  return code.replace(/\D/g, '').slice(0, length);
}

/**
 * 验证谷歌验证码格式
 * @param code 验证码字符串
 * @returns 是否是有效的验证码
 */
export function isValidGoogleAuthCode(code: string): boolean {
  return /^\d{6}$/.test(code);
}

/**
 * 确保base64图片字符串有正确的前缀
 * @param base64 原始base64字符串
 * @returns 带有正确前缀的base64 URL
 */
export const ensureBase64ImagePrefix = (base64: string) => {
  if (!base64) return '';
  if (base64.startsWith('data:image')) return base64;
  return `data:image/png;base64,${base64.trim()}`;
};

/**
 * 格式化翻译文本，替换占位符
 * 支持两种占位符格式:
 * 1. 单大括号格式: {key}
 * 2. 双大括号格式: {{key}}
 * 
 * @param template 翻译模板字符串
 * @param params 替换参数对象
 * @returns 格式化后的翻译文本
 * 
 * @example
 * // 返回: "Value is 5"
 * formatTranslation("Value is {value}", { value: 5 })
 * 
 * @example
 * // 返回: "Maximum length is 10 characters"
 * formatTranslation("Maximum length is {{max}} characters", { max: 10 })
 */
export function formatTranslation(template: string, params: Record<string, any>): string {
  if (!template) return '';
  if (!params || Object.keys(params).length === 0) return template;
  
  let result = template;
  
  // 处理单大括号格式: {key}
  Object.entries(params).forEach(([key, value]) => {
    result = result.replace(new RegExp(`\\{${key}\\}`, 'g'), String(value));
  });
  
  // 处理双大括号格式: {{key}}
  Object.entries(params).forEach(([key, value]) => {
    result = result.replace(new RegExp(`\\{\\{${key}\\}\\}`, 'g'), String(value));
  });
  
  return result;
}
